#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>


extern char** environ;

char* my_getenv(char* envname)
{
  int i = 0;
  while(environ[i])
  {
    char *ret = strstr(environ[i],envname);
    if(ret)
    {
      return ret;
    }
    ++i;
  }
  return NULL;
}

//int main(int argc,char* argv[],char* env[])
//{
//
//  for(int i = 0;i<argc;++i)
//  {
//    printf("%s\n",argv[i]);
//  }
//
//  printf("PATH:%s\n",my_getenv("PATH=/"));
//
////  printf("PATH:%s\n",getenv("PATH"));
////  printf("HOME:%s\n",getenv("HOME"));
////  printf("HOSTNAME:%s\n",getenv("HOSTNAME"));
//
//
//
//  //int i = 0;
//  //while(environ[i])
//  //{
//  //  printf("%s\n",environ[i++]);
//  //}
//
//  //int i = 0;
//  //while(env[i])
//  //{
//  //  printf("%s\n",env[i++]);
//  //}
//
//
//
//  //int cnt = 5;
//  //while(cnt--)
//  //{
//  //  printf("i'm cmd -> process!\n");
//  //  sleep(1);
//  //}
//  return 0;
//}


//int main()
//{
//  printf("hello world,pid:%d,ppid:%d\n",getpid(),getppid());
//  printf("my_str:%s\n",getenv("my_str"));
//  return 0;
//}

int un_gal;
int v_gal = 100;

int main()
{
  printf("code addr:%p\n",main);//函数是放在代码区的
  
  char* str = "abcdef";
  printf("rdonly addr:%p\n",str);

  printf("uninit global addr:%p\n",&un_gal);//未初始化
  printf("init global addr:%p\n",&v_gal);//已初始化

  char* heap = (char*)malloc(10);
  char* heap1 = (char*)malloc(10);
  char* heap2 = (char*)malloc(10);
  char* heap3 = (char*)malloc(10);
  char* heap4 = (char*)malloc(10);
  printf("heap:%p\n",heap);
  printf("heap:%p\n",heap1);
  printf("heap:%p\n",heap2);
  printf("heap:%p\n",heap3);
  printf("heap:%p\n",heap4);

  printf("stack:%p\n",&str);
  printf("stack:%p\n",&heap);

  int a = 0;
  int b = 0;
  int c = 0;
  printf("stack:%p\n",&a);
  printf("stack:%p\n",&b);
  printf("stack:%p\n",&c);


  return 0;
}

//int main()
//{
//  int value = 100;
//  int ret = fork();//创建子进程
//  if(ret == 0)
//  {
//    int cnt = 5;
//    while(cnt)
//    {
//      printf("i'm child, cnt:%d, value:%d, &value:%p\n ",cnt,value,&value);
//      sleep(1);
//      --cnt;
//      if(cnt == 2)
//      {
//        printf("=====================child修改数据====================\n");
//        value = 200;
//        printf("=====================child修改完成====================\n");
//      }
//    }
//  }
//  else if(ret > 0)
//  {
//    while(1)
//    {
//      printf("i'm parent, value:%d, &value:%p\n",value,&value);
//      sleep(1);
//    }
//  }
//  return 0;
//}

